package org.easy.eao;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

/**
 * 存取动作执行者接口
 * @author Frank
 */
public interface Action<A extends Annotation> {

	/**
	 * 获取该存取动作所对应的注释类
	 * @return
	 */
	Class<A> getAnnotationClass();

	/**
	 * 动作执行者的初始化方法<br/>
	 * 由该方法负责将方法声明中的运行时信息提取出来
	 * @param anno 注释实例
	 * @param method 注释所在的方法
	 * @param clz 方法所在的 EAO 接口
	 */
	void initialize(Annotation anno, Method method, Class<?> clz);

	/**
	 * 执行指定的存取动作<br/>
	 * EAO方法声明的运行时执行代码
	 * @param parameters 运行时的方法参数
	 * @return 存取动作的执行结果
	 */
	Object execute(final Object[] parameters);

}